package com.ruoyi.system.service;

import java.util.List;
import com.ruoyi.system.domain.DatingMatch;
import com.ruoyi.system.domain.DatingMember;

/**
 * 婚恋匹配记录Service接口
 * 
 * @author ruoyi
 * @date 2024-01-15
 */
public interface IDatingMatchService 
{
    /**
     * 查询婚恋匹配记录
     * 
     * @param matchId 婚恋匹配记录主键
     * @return 婚恋匹配记录
     */
    public DatingMatch selectDatingMatchByMatchId(Long matchId);

    /**
     * 查询婚恋匹配记录列表
     * 
     * @param datingMatch 婚恋匹配记录
     * @return 婚恋匹配记录集合
     */
    public List<DatingMatch> selectDatingMatchList(DatingMatch datingMatch);

    /**
     * 新增婚恋匹配记录
     * 
     * @param datingMatch 婚恋匹配记录
     * @return 结果
     */
    public int insertDatingMatch(DatingMatch datingMatch);

    /**
     * 修改婚恋匹配记录
     * 
     * @param datingMatch 婚恋匹配记录
     * @return 结果
     */
    public int updateDatingMatch(DatingMatch datingMatch);

    /**
     * 批量删除婚恋匹配记录
     * 
     * @param matchIds 需要删除的婚恋匹配记录主键集合
     * @return 结果
     */
    public int deleteDatingMatchByMatchIds(Long[] matchIds);

    /**
     * 删除婚恋匹配记录信息
     * 
     * @param matchId 婚恋匹配记录主键
     * @return 结果
     */
    public int deleteDatingMatchByMatchId(Long matchId);

    /**
     * 自动匹配算法 - 为指定人员寻找最佳匹配
     * 
     * @param memberId 人员ID
     * @param maxCount 最大匹配数量
     * @return 匹配结果列表
     */
    public List<DatingMatch> autoMatch(Long memberId, int maxCount);

    /**
     * 手动创建匹配
     * 
     * @param memberIdA 人员A ID
     * @param memberIdB 人员B ID
     * @param remark 备注
     * @return 结果
     */
    public int createManualMatch(Long memberIdA, Long memberIdB, String remark);

    /**
     * 计算两个人员的匹配得分
     * 
     * @param memberA 人员A
     * @param memberB 人员B
     * @return 匹配得分 (0-100)
     */
    public double calculateMatchScore(DatingMember memberA, DatingMember memberB);

    /**
     * 查询指定人员的匹配记录
     * 
     * @param memberId 人员ID
     * @return 匹配记录集合
     */
    public List<DatingMatch> selectMatchByMemberId(Long memberId);

    /**
     * 统计匹配数据
     * 
     * @return 统计信息
     */
    public Object getMatchStatistics();
} 